201712-2
试题名称：
游戏
时间限制：
1.0s
内存限制：
256.0MB
问题描述：
问题描述
　　有n个小朋友围成一圈玩游戏，小朋友从1至n编号，2号小朋友坐在1号小朋友的顺时针方向，3号小朋友坐在2号小朋友的顺时针方向，……，1号小朋友坐在n号小朋友的顺时针方向。
　　游戏开始，从1号小朋友开始顺时针报数，接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数（即数的个位）为k，则该小朋友被淘汰出局，不再参加以后的报数。当游戏中只剩下一个小朋友时，该小朋友获胜。
　　例如，当n=5, k=2时：
　　1号小朋友报数1；
　　2号小朋友报数2淘汰；
　　3号小朋友报数3；
　　4号小朋友报数4淘汰；
　　5号小朋友报数5；
　　1号小朋友报数6淘汰；
　　3号小朋友报数7；
　　5号小朋友报数8淘汰；
　　3号小朋友获胜。

　　给定n和k，请问最后获胜的小朋友编号为多少？
输入格式
　　输入一行，包括两个整数n和k，意义如题目所述。
输出格式
　　输出一行，包含一个整数，表示获胜的小朋友编号。
样例输入
5 2
样例输出
3
样例输入
7 3
样例输出
4
数据规模和约定
　　对于所有评测用例，1 ≤ n ≤ 1000，1 ≤ k ≤ 9。

先贴出两个大佬的代码:
https://blog.csdn.net/wl16wzl/article/details/79275069
https://blog.csdn.net/qq_16234613/article/details/79006514
https://www.cnblogs.com/moujun1001/p/9362666.html
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
int main()
{
	int n,k;
	queue<int> q;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
	q.push(i);
	int t=1,u=1;
	while(!q.empty())
	{
		u=q.front();
		q.pop();
		if(t%k==0||t%10==k);
		else q.push(u);
		t++;
	}
	printf("%d\n",u);
	return 0;
}

#include<iostream>
#include<queue>

using namespace std;

int main(){
    int N,K, num=1;
    queue<int> list;
    cin>>N>>K;
    for(int i=1; i<=N; i++){
        list.push(i);
    }
    while(list.size()>1){
        int top = list.front();
        list.pop();
        if(num%K!=0 && (num-num/10*10)!= K ){
            list.push(top);
        }
        num++;
    }

    cout<<list.front();
    return 0;
}

下面是我自己写的:只得到了20分,给的两个样例都通过了
#include<iostream>
using namespace std;
const int N=1001;
int a[N];
bool b[N]= {false};

int main()
{
    int n,k,i,j,index;
    cin>>n>>k;
    index=n;
    j=n;
    for(i=1; i<=n; i++)
        a[i]=i;
    while(index>1)
    {
        for(i=1; a[i]; i++)
        {
            if(a[i]%k==0&&!b[i])
            {
                b[i]=true;
                index--;
            }
            else if(!b[i])
            {
                j++;
                a[i]=j;
            }
        }
    }

    for(i=1; i<=n; i++)
        if(!b[i])
            cout<<i<<endl;
    return 0;
}
